<?php
/**
 * 封装的JSON响应类
 * 
 * 可以在Controller里面的action使用
 * <code>
 * return new IJSONResponse($code, $message, $data, $exception);
 * </code>
 *
 * @version $Id: IJSONResponse.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.json
 * @since 0.0.1
 */
class IJSONResponse extends IAbstractView {
	private $code;
	private $message;
	private $exception;
	private $data;	
	
	/**
	 * 构造方法
	 *
	 * @param integer $code 代号
	 * @param string $message 消息
	 * @param mixed $data 数据
	 * @param Exception $exception 异常对象
	 */
	public function __construct($code, $message = null, $data = null, $exception = null) {
		$this->setCode($code);
		$this->setMessage($message);
		$this->setData($data);
		if (is_object($exception) && ($exception instanceof Exception)) {
			$this->setException($exception);
		}
	}
	
	public function name() {
		return "json_response";
	}
	
	/**
	 * 设置代号
	 *
	 * @param integer $code 代号
	 */
	public function setCode($code) {
		$this->code = $code;
	}
	
	/**
	 * 设置消息
	 *
	 * @param string $message 消息
	 */
	public function setMessage($message) {
		$this->message = $message;
	}
	
	/**
	 * 设置异常对象
	 *
	 * @param Exception $exception 异常对象
	 */
	public function setException(Exception $exception) {
		$this->exception = $exception;
	}
	
	/**
	 * 设置数据
	 *
	 * @param mixed $data 数据
	 */
	public function setData($data) {
		$this->data = $data;
	}
	
	/**
	 * 取得代号
	 *
	 * @return integer
	 */
	public function code() {
		return $this->code;
	}
	
	/**
	 * 取得消息
	 *
	 * @return string
	 */
	public function message() {
		return $this->message;
	}
	
	/**
	 * 取得数据
	 *
	 * @return mixed
	 */
	public function data() {
		return $this->data;
	}
	
	/**
	 * 取得异常信息
	 *
	 * @return Exception
	 */
	public function exception() {
		return $this->exception;
	}
	
	/**
	 * 转换为JSON
	 *
	 * @return IJSON
	 */
	public function toJSON() {
		$jsonData = array(
						"code" => $this->code(),
						"message" => $this->message(),
						"exception" => $this->exception(),
						"data" => $this->data()
					);
		return new IJSON($jsonData);
	}
	
	/**
	 * 执行
	 *
	 */
	public function display() {
		echo $this->toJSON();
	}
	
	/**
	 * 添加键值对
	 *
	 * @param mixed $key 键
	 * @param mixed $value 值
	 * @since 0.1
	 */
	public function put(array $values = null) {
		return;
	}		
	
	public function __toString() {
		return $this->toJSON()->__toString();
	}
}

?>